package co.com.sewebpoint.dao.imp;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.com.sewebpoint.dao.HibernateSessionFactory;
import co.com.sewebpoint.dao.SolicitudDAO;
import co.com.sewebpoint.exception.DaoExceptionSE;
import co.com.sewebpoint.model.Solicitud;
import co.com.sewebpoint.model.Usuario;

/**
 * Clase que implementa la interfas SolicitudDAO
 * 
 * @author Esteban Hurtado y Sara Tamayo
 * @version 1.0
 * @see co.com.sewebpoint.dao.SolicitudDAO
 * 
 */

public class SolicitudDAOIMP extends HibernateDaoSupport implements SolicitudDAO {

	
	
	

	@Override
	public Solicitud insert(Solicitud solicitud) throws DaoExceptionSE {
			
			Session session = null;		
			Transaction tx = null;
			
			
			try{
				session = getSession();
				
				 // metodo save para guardar un objeto en la Base de datos
				
				tx = session.beginTransaction();
				session.save(solicitud);
				tx.commit();
				
				
			
			}catch(HibernateException e){
				
				
				throw new DaoExceptionSE(e);
				
				
			
			}finally{
				
				// cerrar la session 
				//session.close();
				
				
				
			}
			
			
			return solicitud;
		}

	



	@Override
	public Solicitud update(Solicitud solicitud) throws DaoExceptionSE {
		
		Session session = null;		
		Transaction tx = null;
		
		
		try{
			session = getSession();
			
			 // metodo save para guardar un objeto en la Base de datos
			
			tx = session.beginTransaction();
			session.update(solicitud);
			tx.commit();
			
		
		}catch(HibernateException e){
			
			throw new DaoExceptionSE(e);
		
		}finally{
			
			// cerrar la session 
			//session.close();
			
		}
		
		
		return solicitud;
	}



	@Override
	public void delete(Solicitud solicitud) throws DaoExceptionSE {
				
		Session session = null;		
		Transaction tx = null;
		
		
		try{
			session = getSession();
			
			 // metodo save para guardar un objeto en la Base de datos
			
			tx = session.beginTransaction();
			solicitud.setHabilitado(false);
			
			session.update(solicitud);
			tx.commit();
			
		
		}catch(HibernateException e){
			
			throw new DaoExceptionSE(e);
		
		}finally{
			
			// cerrar la session 
			//session.close();
			
		}
		
		
		
		
	}

	
	
	@Override
	public List<Solicitud> getAllItems() throws DaoExceptionSE {
		
		List<Solicitud> solicitudes = new ArrayList<Solicitud>();
		Session session = null;
		try{
			session = getSession();
			// usado para hacer consultas a la base de datos
			
			Criteria criteria = session.createCriteria(Solicitud.class);
			solicitudes = criteria.list();
		}catch(HibernateException e){
			
			throw new DaoExceptionSE(e);
		}finally{
			
			// cerrar la session 
			//session.close();
		}
		
		return solicitudes;
	}

	
	
	@Override
	public Solicitud getKeyItem(Integer id) throws DaoExceptionSE {
		
		Solicitud solicitud = null;
		Session session = null;
		
		try{
			session = getSession();
			
			/* // este es el metodo para cargar un objeto segun su primaryKey
			
			//solicitud = (Solicitud) session.load(Solicitud.class, id);*/
			
			
			// usado para hacer consultas a la base de datos
			Criteria criteria = session.createCriteria(Solicitud.class)
					.add(Restrictions.eq("id", id));// es el where en la sentencia SQL
			solicitud =(Solicitud) criteria.uniqueResult();

			
		
		}catch(HibernateException e){
			
			throw new DaoExceptionSE(e);
		}finally{
			
			// cerrar la session 
			//session.close();
			
		}
		
		
		return solicitud;
	}



	

}
